﻿package com.google.code.p.ivans.applications;

import java.util.Calendar;
import java.util.GregorianCalendar;

import com.google.code.p.ivans.entities.Order;
import com.google.code.p.ivans.entities.Waiter;
import com.google.code.p.ivans.serviceinterfaces.OrderServiceInterface;
import com.google.code.p.ivans.serviceinterfaces.WaiterServiceInterface;
import com.google.code.p.ivans.serviceinterfaces.WaitersOrdersServiceInterface;
import com.google.code.p.ivans.serviceinterfacesimpls.OrderServiceInterfaceImpl;
import com.google.code.p.ivans.serviceinterfacesimpls.WaiterServiceInterfaceImpl;
import com.google.code.p.ivans.serviceinterfacesimpls.WaitersOrdersServiceInterfaceImpl;

//приложение 2-го задания
public class Application_2 {
	/*
	public static void main(String[] args) {
		
		WaiterServiceInterface waiterSI = new WaiterServiceInterfaceImpl();
		OrderServiceInterface orderSI = new OrderServiceInterfaceImpl();
		WaitersOrdersServiceInterface waitersOrdersSI = new WaitersOrdersServiceInterfaceImpl();
		
		//официанты
		waiterSI.addWaiter(new Waiter("Иннокентий", "Василевский", "Карлович", 
										new GregorianCalendar(1988, Calendar.JULY, 11),
										new GregorianCalendar(2007, Calendar.DECEMBER, 14),
										21000));		
		waiterSI.addWaiter(new Waiter("Глеб", "Копытин", "Дмитриевич", 
				new GregorianCalendar(1993, Calendar.MAY, 8),
				new GregorianCalendar(2011, Calendar.SEPTEMBER, 26),
				19200));
		waiterSI.addWaiter(new Waiter("Марина", "Аткарова", "Кирилловна", 
				new GregorianCalendar(1984, Calendar.JUNE, 6),
				new GregorianCalendar(2001, Calendar.NOVEMBER, 11),
				27600));
		waiterSI.addWaiter(new Waiter("Иннокентий", "Грибанов", "Карлович", 
				new GregorianCalendar(1984, Calendar.FEBRUARY, 23),
				new GregorianCalendar(2009, Calendar.JULY, 17),
				30500));
		waiterSI.addWaiter(new Waiter("Геннадий", "Иванов", "Анатольевич", 
				new GregorianCalendar(1983, Calendar.AUGUST, 9),
				new GregorianCalendar(2010, Calendar.MARCH, 22),
				24500));
		
		//заказы
		orderSI.addOrder(new Order(4,new String[]{"Куриный суп по-испански"}, 
									new GregorianCalendar(2013, Calendar.DECEMBER, 10)));
		orderSI.addOrder(new Order(4,new String[]{"Паста классическая", "Вино красное Cogerent"}, 
				new GregorianCalendar(2013, Calendar.DECEMBER, 12)));
		orderSI.addOrder(new Order(4,new String[]{"Эклеры с шоколадным кремом"}, 
				new GregorianCalendar(2013, Calendar.DECEMBER, 12)));
		orderSI.addOrder(new Order(4,new String[]{ "Щи кислые"}, 
				new GregorianCalendar(2014, Calendar.JANUARY, 8)));
		orderSI.addOrder(new Order(4,new String[]{"Куриный суп по-испански", "Запеканка с мятой", "Чай зеленый с лимоном"}, 
				new GregorianCalendar(2014, Calendar.MAY, 19)));
		
		//связываем
		waitersOrdersSI.addLink(3, 3);
		waitersOrdersSI.addLink(3, 4);
		waitersOrdersSI.addLink(1, 2);
		waitersOrdersSI.addLink(2, 1);
		waitersOrdersSI.addLink(5, 1);	
		
		//поиск сотрудников "Иннокентий", "Василевский", "Карлович"
		Waiter[] found = waiterSI.getAllWaitersByName("Иннокентий", "Василевский","Карлович");
		System.out.println("-----------------------------------------");
		System.out.println(">>Ищем \"Иннокентий Василевский Карлович\"");
		
		if(found != null) {
			System.out.println("Результаты:\n");
			for(int i = 0; i < found.length; i++) {
				System.out.println(found[i] + "\n");
			}
		}
		
		//поиск сотрудников c именем "Иннокентий"
		found = waiterSI.getAllWaitersByName("Иннокентий");
		System.out.println("-----------------------------------------");
		System.out.println(">>Ищем \"Иннокентий\"");
		
		if(found != null) {
			System.out.println("Результаты:\n");
			for(int i = 0; i < found.length; i++) {
				System.out.println(found[i] + "\n");
			}
		}
		
		//поиск заказа по id
		Order order = orderSI.getOrderByID(3);
		System.out.println("-----------------------------------------");
		System.out.println(">>Ищем заказ, чей id = 3");
		
		if(order != null) {
			System.out.println("Результаты:\n");			
			System.out.println(order + "\n");		
		}
		
		//поиск заказов по id официанта
		Order[] orders = waiterSI.getWaitersOrders(3);
		System.out.println("-----------------------------------------");
		System.out.println(">>Ищем все заказы, коих обслуживал 3 официант");
		
		if(orders != null) {
			System.out.println("Результаты:\n");			
			for(int i = 0; i < orders.length; i++) {
				System.out.println(orders[i] + "\n");
			}	
		}
		//До обновления
		System.out.println("-----------------------------------------");
		System.out.println(">>До обновления официанты:\n");
		System.out.println(waiterSI.getByID(1) +  "\n");
		System.out.println(waiterSI.getByID(2) +  "\n");
			
		//обновление
		waiterSI.updateWaiter(waiterSI.getByID(1));
		waiterSI.updateWaiter(waiterSI.getByID(2));
		
		//После обновления
		System.out.println("-----------------------------------------");
		System.out.println(">>После обновления официанты:\n");
		System.out.println(waiterSI.getByID(1) +  "\n");
		System.out.println(waiterSI.getByID(2) +  "\n");
		
		
		//До обновления
		System.out.println("-----------------------------------------");
		System.out.println(">>До обновления заказы:\n");
		System.out.println(orderSI.getOrderByID(3) +  "\n");
		System.out.println(orderSI.getOrderByID(4) +  "\n");
			
		//обновление
		orderSI.update(orderSI.getOrderByID(3));
		orderSI.update(orderSI.getOrderByID(4));
		
		//После обновления
		
		System.out.println(">>После обновления заказы:\n");
		
		System.out.println(orderSI.getOrderByID(3) +  "\n");
		System.out.println(orderSI.getOrderByID(4) +  "\n");
		
		//вывод всех официантов
		System.out.println("-----------------------------------------");
		System.out.println(">>Все официанты до удаления:\n");
		showWaiters(waiterSI.getAllWaiters());
		
		//удаляем
		System.out.println("\n>>удаляем 2 и 4 официантов\n");
		waiterSI.removeByID(2);
		waiterSI.removeByID(4);
		
		//вывод всех официантов
		
		System.out.println(">>Все официанты после удаления:\n");
		showWaiters(waiterSI.getAllWaiters());
		
		
		//вывод всех заказов
		System.out.println("-----------------------------------------");
		System.out.println(">>Все заказы до удаления:");
		Order[] allOrders = orderSI.getAllOrders();
		for(int i = 0; i < allOrders.length; i++) {
			System.out.println();
			System.out.println(allOrders[i]);
			System.out.println();
		}
		
		//удаляем
		System.out.println("\n>>удаляем 1 и 3 заказы\n");
		orderSI.removeByID(1);
		orderSI.removeByID(3);
		
		//вывод всех заказов
		System.out.println(">>Все заказы после удаления:");
		allOrders = orderSI.getAllOrders();
		for(int i = 0; i < allOrders.length; i++) {
			System.out.println();
			System.out.println(allOrders[i]);
			System.out.println();
		}
		
	}
	
	public static void showWaiters(Waiter[] waiters) {
		System.out.println("ID   ФИО                                         Зарплата Дата рождения Дата принятия ");
				
		for(int i = 0; i < waiters.length; i++) {
			long id = waiters[i].getWaiterID();
			int signs = 0;
			while(id != 0) {
				id /= 10;
				signs++;
			}
			
			StringBuilder builder = new StringBuilder();
 			builder.append(waiters[i].getWaiterID());
 			
 			for(int j = signs; j < 5; j++) {
 				builder.append(' ');
 			}
 			
 			String FIO = waiters[i].getLastName() + " " + waiters[i].getFirstName() + " " + waiters[i].getPatronymicName();
 			builder.append(FIO);
 	
 			for(int j = FIO.length(); j < 44; j++) {
 				builder.append(' ');
 			}
 			
 			int salary = waiters[i].getSalary();
 			signs = 0;
 			while(salary != 0) {
				salary /= 10;
				signs++;
			}
 			
 			builder.append(waiters[i].getSalary());
 			for(int j = signs; j < 9; j++) {
 				builder.append(' ');
 			}
 			
 			GregorianCalendar bornDate = waiters[i].getBornDate();
 			
 			int day = bornDate.get(Calendar.DAY_OF_MONTH);
 			int month = (bornDate.get(Calendar.MONTH) + 1); 			
 			String born = ((day < 10) ? "0" + day:day)   + "-" + ((month < 10) ? "0" + month:month) + "-" + bornDate.get(Calendar.YEAR) + "    ";
 			
 			builder.append(born);  
 			
 			GregorianCalendar hireDate = waiters[i].getHireDate();
 			
 			day = hireDate.get(Calendar.DAY_OF_MONTH);
 			month = (hireDate.get(Calendar.MONTH) + 1); 
 			String hire = ((day < 10) ? "0" + day:day)   + "-" + ((month < 10) ? "0" + month:month) + "-" + hireDate.get(Calendar.YEAR) + "    ";
 			
 			builder.append(hire); 
 			System.out.println(builder.toString());
		}
	}	
	*/
}
